Skip to content

Comments

rpc: fix flaky test TestServerWebsocketReadLimit#32889

Merged
rjl493456442 merged 1 commit intoethereum:masterfrom
mishraa-G:fix-websocket-test
Oct 15, 2025
Merged

rpc: fix flaky test TestServerWebsocketReadLimit#32889
rjl493456442 merged 1 commit intoethereum:masterfrom
mishraa-G:fix-websocket-test

Conversation

@mishraa-G
Copy link
Contributor

Fix: Tolerate "connection reset by peer" in TestServerWebsocketReadLimit

What does this PR do?

This PR updates the TestServerWebsocketReadLimit test to tolerate the "connection reset by peer" error as a valid outcome when the websocket read limit is exceeded.
This error can occur due to a race condition where the TCP connection closes before the websocket close frame is sent, as discussed in issue #32866.

Why is this needed?

Occasionally, in CI or some local environments, the test fails with:

unexpected error for read limit violation: write tcp ...: write: connection reset by peer

Previously, the test only accepted specific websocket errors (like CloseError code 1009, ErrReadLimit, or errors containing "1009"/"message too big").
By allowing "connection reset by peer", the test becomes more robust against this race condition and prevents intermittent failures.

Reference

Fixes #32866

Checklist

  • Ran tests locally
  • Only test code changed

Let me know if you want to edit or clarify anything!

@rjl493456442 rjl493456442 changed the title rpc: tolerate "connection reset by peer" error in TestServerWebsocketReadLimit rpc: fix flaky test TestServerWebsocketReadLimit Oct 15, 2025
@rjl493456442 rjl493456442 merged commit 3cfc334 into ethereum:master Oct 15, 2025
6 of 7 checks passed
@rjl493456442 rjl493456442 added this to the 1.16.5 milestone Oct 15, 2025
wit765 added a commit to wit765/XDPoSChain that referenced this pull request Oct 27, 2025
wit765 added a commit to wit765/XDPoSChain that referenced this pull request Nov 9, 2025
AnilChinchawale pushed a commit to XinFinOrg/XDPoSChain that referenced this pull request Nov 14, 2025
atkinsonholly pushed a commit to atkinsonholly/ephemery-geth that referenced this pull request Nov 24, 2025
prestoalvarez pushed a commit to prestoalvarez/go-ethereum that referenced this pull request Nov 27, 2025
UlysseCorbeil pushed a commit to streamingfast/go-ethereum that referenced this pull request Feb 18, 2026
* eth/filters: uninstall subscription in filter apis on error (ethereum#32894)

Fix ethereum#32893.

In the previous ethereum#32794, it
only handles the pending tx filter, while there are also head and log
filters. This PR applies the patch to all filter APIs and uses `defer`
to maintain code consistency.

* triedb, core/rawdb: implement the partial read in freezer (ethereum#32132)

This PR implements the partial read functionalities in the freezer, optimizing
the state history reader by resolving less data from freezer.

---------

Signed-off-by: jsvisa <delweng@gmail.com>
Co-authored-by: Gary Rong <garyrong0905@gmail.com>

* p2p/enode: optimize LogDist (ethereum#32887)

This speeds up LogDist by 75% using 64-bit operations instead
of byte-wise XOR.

---------

Co-authored-by: Felix Lange <fjl@twurst.com>

* p2p/enode: optimize DistCmp (ethereum#32888)

This speeds up DistCmp by 75% through using 64-bit operations instead of
byte-wise XOR.

* core/txpool/legacypool: move queue out of main txpool (ethereum#32270)

This PR move the queue out of the main transaction pool.
For now there should be no functional changes.
I see this as a first step to refactor the legacypool and make the queue
a fully separate concept from the main pending pool.

---------

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
Co-authored-by: Csaba Kiraly <csaba.kiraly@gmail.com>

* cmd/workload: filter fuzzer test (ethereum#31613)

This PR adds a `filterfuzz` subcommand to the workload tester that
generates requests similarly to `filtergen` (though with a much smaller
block length limit) and also verifies the results by retrieving all
block receipts in the range and locally filtering out relevant results.
Unlike `filtergen` that operates on the finalized chain range only,
`filterfuzz` does check the head region, actually it seeds a new query
at every new chain head.

* p2p/discover: wait for bootstrap to be done (ethereum#32881)

This ensures the node is ready to accept other nodes into the
table before it is used in a test.

Closes ethereum#32863

* triedb/pathdb: catch int conversion overflow in 32-bit (ethereum#32899)

The limit check for `MaxUint32` is done after the cast to `int`. On 64
bits machines, that will work without a problem. On 32 bits machines,
that will always fail. The compiler catches it and refuses to build.

Note that this only fixes the compiler build. ~~If the limit is above
`MaxInt32` but strictly below `MaxUint32` then this will fail at runtime
and we have another issue.~~ I checked and this should not happen during
regular execution, although it might happen in tests.

* eth/catalyst: remove useless log on enabling Engine API (ethereum#32901)

* eth: do not warn on switching from snap sync to full sync (ethereum#32900)

This happens normally after a restart, so it is better to use Info level
here.

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>

* core/txpool/legacypool: fix pricedList updates (ethereum#32906)

This pr addresses a few issues brought by the ethereum#32270 

- Add updates to pricedList after dropping transactions.
- Remove redundant deletions in queue.evictList, since
pool.removeTx(hash, true, true) already performs the removal.
- Prevent duplicate addresses during promotion when Reset is not nil.

* accounts/abi: check presence of payable fallback or receive before proceeding with transfer (ethereum#32374)

remove todo

* internal/ethapi: convert legacy blobtx proofs in sendRawTransaction (ethereum#32849)

This adds a temporary conversion path for blob transactions with legacy
proof sidecar. This feature will activate after Fusaka. We will phase
this out when the fork has sufficiently settled and client side
libraries have been upgraded to send the new proofs.

* rpc: fix flaky test TestServerWebsocketReadLimit (ethereum#32889)

* eth/protocols/eth: reject message containing duplicated txs and drop peer (ethereum#32728)

Drop peer if sending the same transaction multiple times in a single message.

Fixes ethereum#32724


---------

Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
Co-authored-by: Gary Rong <garyrong0905@gmail.com>
Co-authored-by: Csaba Kiraly <csaba.kiraly@gmail.com>

* p2p/discover: remove hot-spin in table refresh trigger (ethereum#32912)

This fixes a regression introduced in ethereum#32518. In that PR, we removed the
slowdown logic that would throttle lookups when the table runs empty.
Said logic was originally added in ethereum#20389.

Usually it's fine, but there exist pathological cases, such as hive
tests, where the node can only discover one other node, so it can only
ever query that node and won't get any results. In cases like these, we
need to throttle the creation of lookups to avoid crazy CPU usage.

* version: release go-ethereum v1.16.5 stable

* version: begin v1.16.6 release cycle

* cmd/geth: log current key in expandVerkle instead of keylist[0] (ethereum#32689)

Fix logging in the verkle dump path to report the actual key being
processed.
Previously, the loop always logged keylist[0], which misled users when
expanding multiple keys and made debugging harder. This change aligns
the
log with the key passed to root.Get, improving traceability and
diagnostics.

* ethclient: add support for eth_simulateV1 (ethereum#32856)

Adds ethclient support for the eth_simulateV1 RPC method, which allows
simulating transactions on top of a base state without making changes to
the blockchain.

---------

Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>

* internal/ethapi: add eth_SendRawTransactionSync (ethereum#32830)

New RPC method eth_sendRawTransactionSync(rawTx, timeoutMs?) that
submits a signed tx and blocks until a receipt is available or a timeout
elapses.

Two CLI flags to tune server-side limits:

--rpc.txsync.defaulttimeout (default wait window)

--rpc.txsync.maxtimeout (upper bound; requests are clamped)

closes ethereum#32094

---------

Co-authored-by: aodhgan <gawnieg@gmail.com>
Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>

* core/state: state copy bugfixes with Verkle Trees (ethereum#31696)

This change addresses critical issues in the state object duplication
process specific to Verkle trie implementations. Without these
modifications, updates to state objects fail to propagate correctly
through the trie structure after a statedb copy operation, leading to
inaccuracies in the computation of the state root hash.

---------

Co-authored-by: Guillaume Ballet <3272758+gballet@users.noreply.github.com>

* eth/ethconfig : fix eth generate config (ethereum#32929)

* eth, internal: add blob conversion for SendRawTransactionSync (ethereum#32930)

* solve conflicts

* cmd/utils: use maximum uint64 value for receipt chain insertion (ethereum#32934)

* use context for witness and fix its test

* fix witness test due to state type change

* remove geth discarded code / reformat

* fix AnnouncementsOnly tests

* tracers data edits due to tests run

* eth/fetcher: add metrics for tracking slow peers (ethereum#32964)

This PR introduces two new metrics to monitor slow peers
- One tracks the number of slow peers.
- The other measures the time it takes for those peers to become
"unfrozen"

These metrics help with monitoring and evaluating the need for future
optimization of the transaction fetcher and peer management, for example i
n peer scoring and prioritization.

Additionally, this PR moves the fetcher metrics into a separate file, 
`eth/fetcher/metrics.go`.

* eth/fetcher: remove dangling peers from alternates (ethereum#32947)

This PR removes dangling peers in `alternates` map

In the current code, a dropped peer is removed from alternates for only
the specific transaction hash it was requesting. If that peer is listed
as an alternate for other transaction hashes, those entries still stick
around in alternates/announced even though that peer already got
dropped.

* triedb/pathdb: fix index out of range panic in decodeSingle (ethereum#32937)

Fixes TestCorruptedKeySection flaky test failure.
https://github.com/ethereum/go-ethereum/actions/runs/18600235182/job/53037084761?pr=32920

* core/types: prealloc map in HashDifference as in TxDifference (ethereum#32946)

* eth/filters: avoid rebuild the hash map multi times (ethereum#32965)

* core/vm: don't call SetCode after contract creation if initcode didn't return anything (ethereum#32916)

The code change is a noop here, and the tracing hook shouldn't be
invoked if the account code doesn't actually change.

* cmd/keeper: use the ziren keccak precompile (ethereum#32816)

Uses the go module's `replace` directive to delegate keccak computation
to precompiles.

This is still in draft because it needs more testing. Also, it relies on
a PR that I created, that hasn't been merged yet.

_Note that this PR doesn't implement the stateful keccak state
structure, and it reverts to the current behavior. This is a bit silly
since this is what is used in the tree root computation. The runtime
doesn't currently export the sponge. I will see if I can fix that in a
further PR, but it is going to take more time. In the meantime, this is
a useful first step_

* params: enable osaka on dev mode (ethereum#32917)

enables the osaka fork on dev mode

---------

Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>

* core/txpool: Initialize journal writer for tx tracker (ethereum#32921)

Previously, the journal writer is nil until the first time rejournal
(default 1h), which means during this period, txs submitted to this node
are not written into journal file (transactions.rlp). If this node is
shutdown before the first time rejournal, then txs in pending or queue
will get lost.

Here, this PR initializes the journal writer soon after launch to solve
this issue.

---------

Co-authored-by: Gary Rong <garyrong0905@gmail.com>

* core/state: prevent SetCode hook if contract code is not changed (ethereum#32980)

This PR prevents the SetCode hook from being called when the contract
code
remains unchanged.

This situation can occur in the following cases:
- The deployed runtime code has zero length
- An EIP-7702 authorization attempt tries to unset a non-delegated
account
- An EIP-7702 authorization attempt tries to delegate to the same
account

* triedb/pathdb: make batch with pre-allocated size (ethereum#32914)

In this PR, the database batch for writing the history index data is
pre-allocated.

It's observed that database batch repeatedly grows the size of the
mega-batch,
causing significant memory allocation pressure. This approach can
effectively
mitigate the overhead.

* bump codeql versions

* cmd/geth: add flag to set genesis (ethereum#32844)

This PR is an alternative to ethereum#32556.

Instead of trying to be smart and reuse `geth init`, we can introduce a
new flag `--genesis` that loads the `genesis.json` from file into the
`Genesis` object in the same path that the other network flags currently
work in.

Question: is something like `--genesis` enough to start deprecating
`geth init`?

--

```console
$ geth --datadir data --hoodi
..
INFO [10-06|22:37:11.202]  - BPO2:                        @1762955544
..
$ geth --datadir data --genesis genesis.json
..
INFO [10-06|22:37:27.988]  - BPO2:                       @1862955544
..
```

Pull the genesis [from the
specs](https://raw.githubusercontent.com/eth-clients/hoodi/refs/heads/main/metadata/genesis.json)
and modify one of the BPO timestamps to simulate a shadow fork.

---------

Co-authored-by: rjl493456442 <garyrong0905@gmail.com>

* core/types: remove unused `ErrInvalidTxType` var (ethereum#32989)

The var `ErrInvalidTxType` is never used in the code base.

* blockAlloc test

* core/state: fix the flaky TestSizeTracker (ethereum#32993)

* cmd/devp2p: distinguish the jwt in devp2p and geth (ethereum#32972)

This PR fixes some docs for the devp2p suite and uses the CLI library's required value instead of manually checking if required flags are passed.

* p2p: silence on listener shutdown (ethereum#33001)


Co-authored-by: Felix Lange <fjl@twurst.com>

* cmd/utils: use IsHexAddress method (ethereum#32997)

Using the `IsHexAddress` method will result in no gaps in the
verification logic, making it simpler.

* crypto: implement ziren keccak state (ethereum#32996)

The ethereum#32816 was only using the keccak precompile for some minor task.
This PR implements a keccak state, which is what is used for hashing the
tree.

* rpc: fix a flaky test of the websocket (ethereum#33002)

Found in
https://github.com/ethereum/go-ethereum/actions/runs/17803828253/job/50611300621?pr=32585

```
--- FAIL: TestClientCancelWebsocket (0.33s)
panic: read tcp 127.0.0.1:36048->127.0.0.1:38643: read: connection reset by peer [recovered, repanicked]

goroutine 15 [running]:
testing.tRunner.func1.2({0x98dd20, 0xc0005b0100})
	/opt/actions-runner/_work/_tool/go/1.25.1/x64/src/testing/testing.go:1872 +0x237
testing.tRunner.func1()
	/opt/actions-runner/_work/_tool/go/1.25.1/x64/src/testing/testing.go:1875 +0x35b
panic({0x98dd20?, 0xc0005b0100?})
	/opt/actions-runner/_work/_tool/go/1.25.1/x64/src/runtime/panic.go:783 +0x132
github.com/ethereum/go-ethereum/rpc.httpTestClient(0xc0001dc1c0?, {0x9d5e40, 0x2}, 0xc0002bc1c0)
	/opt/actions-runner/_work/go-ethereum/go-ethereum/rpc/client_test.go:932 +0x2b1
github.com/ethereum/go-ethereum/rpc.testClientCancel({0x9d5e40, 0x2}, 0xc0001dc1c0)
	/opt/actions-runner/_work/go-ethereum/go-ethereum/rpc/client_test.go:356 +0x15f
github.com/ethereum/go-ethereum/rpc.TestClientCancelWebsocket(0xc0001dc1c0?)
	/opt/actions-runner/_work/go-ethereum/go-ethereum/rpc/client_test.go:319 +0x25
testing.tRunner(0xc0001dc1c0, 0xa07370)
	/opt/actions-runner/_work/_tool/go/1.25.1/x64/src/testing/testing.go:1934 +0xea
created by testing.(*T).Run in goroutine 1
	/opt/actions-runner/_work/_tool/go/1.25.1/x64/src/testing/testing.go:1997 +0x465
FAIL	github.com/ethereum/go-ethereum/rpc	0.371s
```

In `testClientCancel` we wrap the server listener in `flakeyListener`,
which schedules an unconditional close of every accepted connection
after a random delay, if the random delay is zero then the timer fires
immediately, and then the http client paniced of connection reset by
peer.

Here we add a minimum 10ms to ensure the timeout won't fire immediately.

Signed-off-by: jsvisa <delweng@gmail.com>

* remove TODOs

* eth/tracers: fix crasher in TraceCall with BlockOverrides (ethereum#33015)

fix ethereum#33014

---------

Co-authored-by: lightclient <lightclient@protonmail.com>

* .gitea/workflows, build: add release build for keeper (ethereum#32632)

* build: fix keeper build (ethereum#33018)

At the time keeper support was added into ci.go, we were using a go.work
file to make ./cmd/keeper accessible from within the main go-ethereum
module. The workspace file has since been removed, so we need to build
keeper from within its own module instead.

* core/rawdb, triedb/pathdb: re-structure the trienode history header (ethereum#32907)

In this PR, several changes have been made:

(a) restructure the trienode history header section

Previously, the offsets of the key and value sections were recorded before 
encoding data into these sections. As a result, these offsets referred to the
start position of each chunk rather than the end position.

This caused an issue where the end position of the last chunk was
unknown, making it incompatible with the freezer partial-read APIs. 
With this update, all offsets now refer to the end position, and the 
start position of the first chunk is always 0.

(b) Enable partial freezer read for trienode data retrieval

The partial freezer read feature is now utilized in trienode data
retrieval, improving efficiency.

* rpc: remove unused vars (ethereum#33012)

* core/state: improve accessList copy (ethereum#33024)

* remove validate_pr workflow

* fix lint

* core: don't modify the shared chainId between tests (ethereum#33020)

* fix config rpc

* core/types: optimize modernSigner.Equal (ethereum#32971)

Equal is called every time the transaction sender is accessed,
even when the sender is cached, so it is worth optimizing.

---------

Co-authored-by: Felix Lange <fjl@twurst.com>

* core: refine condition for using legacy chain freezer directory (ethereum#33032)

* internal/jsre: pass correct args to setTimeout/setInterval callbacks (ethereum#32936)

## Description
- Summary: Correct the JS timer callback argument forwarding to match
standard JS semantics.
- What changed: In `internal/jsre/jsre.go`, the callback is now invoked
with only the arguments after the callback and delay.
- Why: Previously, the callback received the function and delay as
parameters, causing unexpected behavior and logic bugs for consumers.

* .github: add 32-bit CI targets (ethereum#32911)

This adds two new CI targets. One is for building all supported keeper
executables, the other is for running unit tests on 32-bit Linux.

---------

Co-authored-by: Felix Lange <fjl@twurst.com>

* accounts/abi/bind/v2: fix error assertion in test (ethereum#33041)

* p2p: cleanup v4 if v5 failed (ethereum#33005)

Clean the previous resource (v4) if the latter (v5) failed.

* common: simplify FileExist helper (ethereum#32969)

* eth/downloader: fix incorrect waitgroup in test `XTestDelivery` (ethereum#33047)

* eth/tracers: fix prestateTracer for EIP-6780 SELFDESTRUCT (ethereum#33050)

fix ethereum#33049

* common: fix duration comparison in PrettyAge (ethereum#33064)

This pull request updates `PrettyAge.String` so that the age formatter
now treats exact unit boundaries (like a full day or week) as that unit
instead of spilling into smaller components, keeping duration output
aligned with human expectations.

* core/rawdb: fix db inspector by supporting trienode history (ethereum#33087)

* params: set osaka and BPO1 & BPO2 mainnet dates (ethereum#33063)

Sets the fusaka, bpo1, bpo2 timestamps for mainnet
see: https://notes.ethereum.org/@bbusa/fusaka-bpo-timeline

* version: release go-ethereum v1.16.6

* version: begin v1.16.7 release cycle

* go.mod: update to c-kzg v2.1.5 (ethereum#33093)

We unfortunately missed this update for the Geth v1.16.6 release, but it is critical.

* version: release go-ethereum v1.16.7 stable

* fix lint

* miner: set maxBlockSizeBufferZone to zero

* cmd: go mod tidy

* eth/protocols/wit: made protocol version consistent (ethereum#1940)

* chore: fix function name in comment and correct spelling error in config.go (ethereum#1956)

Signed-off-by: findfluctuate <findfluctuate@outlook.com>

* chore: remove repetitive word in comment (ethereum#1909)

Signed-off-by: liuyueyangxmu <liuyueyangxmu@outlook.com>

* core/txpool: added nil checks to prevent crash in stateless mode (ethereum#1961)

* Enforce patch code coverage (ethereum#1964)

* Enforce patch code coverage

* Use CODECOV_TOKEN explicitly

* consensus/bor,core,eth,internal/ethapi,tests: regen mocks and fix tests

* eth: fix lint

* internal/ethapi: fix tests

* eth: skip TestBlobTransactionAnnounce

* core, eth: added LRU memory cache to save witnesses in memory (ethereum#1962)

* core, eth: added LRU memory cache to save 256 witnesses in memory

* core: added unit test for LRU witness cache

* added a wrapper function to write witness in the db and add cache

* minor check

* added more tests to increase coverage

* fix lint

* update tests

* core: rm redundant updation of queuedEvictionMeter

* internal/cli: port txsync flags to new-cli

* eth, internal: add logquerylimit into internal cli

* chore: fix linter

* consensus/bor: ensure late blocks have sufficient build time (ethereum#1963)

* consensus/bor: ensure late blocks have sufficient build time

When a parent block is sealed late (actual seal time exceeds its timestamp), the next block had insufficient time to include transactions, resulting in empty blocks.

Problem:
- Parent block timestamp: T=2s, sealed at T=4s (2s late)
- Next block gets timestamp: parent + period = 4s
- Current time: 4s
- Build time available: 0s → empty block

Solution:
Set header.Time = now + blockPeriod when scheduled time has passed, giving blocks full build time regardless of parent seal latency.

* Address comment

* version: begin v1.16.8 release cycle

* core/txpool: drop peers on invalid KZG proofs

Co-authored-by: Gary Rong <garyrong0905@gmail.com>
Co-authored-by: MariusVanDerWijden <m.vanderwijden@live.de>:

* crypto/ecies: use aes blocksize

Co-authored-by: Gary Rong <garyrong0905@gmail.com>

* version: release go-ethereum v1.16.8 stable

* Return nil from heimdall mock on milestone/checkpoint (ethereum#1988)

* fix randomly failing TestCalcBaseFeeDelhi (ethereum#1987)

* Increase veblop timeout to 8 seconds (ethereum#1986)

* track cache metrics on bps

* track commit time of a block on bp

* finalize and assemble metrics

* intermediate root timer

* tests

* fix integration tests

* simplify test

* lint issue

* blockchain reader tests

* more tests

* more bor tests

* fix lint

* handle duplicate lines

* more improvs on duplicates

* more duplicate handling

* ignore test utils for coverage and more tests

* update code cov

* fix ingore regex

* moving test helpers to test files

* remove unnecessary verkle on beacon and more bor coverage

* fix(rpc): eth_simulateV1 method handler crash (ethereum#1955)

* Verify BlobScheduleConfig before calling CalcBlobFee

* set Nil withdrawals for bor simulation

* simChainHeadReader implements core.BorStateSyncer

* simplify fork checking

* lint fixing

* Add non nil chainConfig for testcase

---------

Co-authored-by: Pratik Patil <pratikspatil024@gmail.com>

* txpool: add stuck transaction rebroadcast mechanism (ethereum#1992)

* txpool: add stuck transaction rebroadcast mechanism

When transactions are broadcast to peers, they're marked as "known" in each peer's knownTxs cache. If the network send fails or the peer fails to request transaction body, the peer will never receive the transaction but the hash remains in knownTxs, preventing future rebroadcasts and causing transactions to get stuck.

This change adds a periodic rebroadcast mechanism that:
- Identifies immediately executable transactions older than RebroadcastInterval but younger than RebroadcastMaxAge
- Clears their hashes from peers' knownTxs caches
- Rebroadcasts them to the network

* minor fix

* Update default rebroadcast interval to 30s

* add tests

* Address comments

* fix: add bor hfs to description and readheadertimeout in config (ethereum#2003)

* init: CLAUDE.md file (ethereum#2000)

* init: CLAUDE.md file

* chore: add some core component and maintaining this file section

* chore: add before making changes section

* consensus/eip1559: add bhilai HF tests and minor refactor (ethereum#1990)

* Validator Set Overrides on Config (ethereum#1958)

* validator set overrides

* including config of mainnet in missing files

* more tests for coverage

* remove duplication

* Add Claude Assistant Workflows (ethereum#2006)

* Add workflow fils

* Disallow external contributors

* Use opus

* bind, params: fix bind/v2 tests and warn about invalid config/flag (ethereum#2007)

* Switch to GCR

* chore: fix lint and tidy cmd

* params: change forks order

* common: check for err

* eth: fix config test

* fix(ci): use custom kurtosis branch (ethereum#2012)

* core, eth, internal: fix tests

* core, internal: defensive unsubscribe on headers chan

* cmd, p2p: fix bug and return on error

* chore: fix lint

* eth: implemented peer consensus based witness verification (ethereum#1766)

* eth: implemented peer consensus based witness verification

* eth/fetcher: update peer drop mechanism

* eth: added dynamic page limit for witness based on gas limit

* eth: fix lint

* eth: download witness within limit and block for verificatio

* eth: fix lint

* eth, core: added a check to fix a potential vulnerability and added test case

* eth, core: include the original peer in the consenses to get consenses between 3 peers

* eth: implemented RequestWitnessPageCount

* eth: implemented wit/2 and added new message type to get the witness metadata

* eth: updated mock file

* eth: removed code duplication

* eth: dropping peer immediately when page count verification fails

* eth: added more  comments

* eth/fetcher: removed the witness verification cache

* eth: excluded the original peer from the selection

* eth: using peer jailing

* eth: more jailing when bahaving maliciously

* renamed wit1 to wit0 and wit2 to wit1

* added tests

* added more tests

* fixed code duplication and lint

* eth: added unit tests

* eth: added unit tests for handleGetWitnessMetadata and the GetWitnessMetadataPacket case in Handle

* eth: added unit tests for RequestWitnessMetadata and ReplyWitnessMetadata

* eth/protocols/wit: added unit test for handleGetWitnessMetadata and handleWitnessMetadata

* eth/protocols/wit: fixed panic in TestReplyWitnessMetadata

* eth/protocols/wit: added unit test to verify wit/1 map and switch between protocols

* eth: covered remaining lines in peer.go

* eth: covered remaining lines in handler_eth.go

* eth: smaller test to increase coverage

* eth: test to test the handler's Handle function

* eth: test remaining jail peer function

* eth: fixed panic

* eth: added get the gas limit from parent header, fallback to config if unavailable

* eth/fetcher: updated unit test to test calculatePageThreshold

* eth: added metrics for peer witness verification

* reduced code duplication in unit tests

* eth/protocols/wit: donot update the version number of wit0

* chore: fix lint

* internal/cli: port TrieJournalDirectory and EnableStateSizeTracking

* Various improvements  (ethereum#1950)

* consensus: avoid mixed fork root hash (#18)

* consensus, core: state sync txs limits (#20)

* eth/downloader: solve milestones whitelist concurrency bug (#22)

* eth/downloader: fix test (#22)

* eth: fix merkle root reorg on nil chain (#23)

* consensus/bor/heimdallgrpc: fix grpc client (#12)

* Revert "consensus, core: state sync txs limits (#20)"

This reverts commit fdbbccc2fceaa6d65657371f8ec151250002c24d.

* core: fix stateSync inner mismatch (issue 34)

* miner: fix flaky commitInterrupt tests

* chore: minor fixes on heimdall grpc client

* cmd: tidy on cmd package

* chore: fix lint

* ci: load kurtosis images from gcr instead of docker hub (ethereum#2014)

* chore: remove `cd` for `working-directory`

* chore: free disk space directly in the kurtosis pre-run step

* chore: regroup build steps

* chore: use kurtosis-pos pre and post actions

* ci: parallel docker builds

* chore: remove kurtosis-pos path

* ci: fix workflow permissions

* fix: typo

* chore: move permissions at the job level

* test

* fix: job order

* chore: nit

* fix: install polycli

* chore: nit

* chore: log local image info

* Dynamic EIP-1559 params setup (ethereum#1989)

* remove base fee validation

* moving flags to miner setup

* set values properly

* proper format

* claude feedback and coverage

* minor missing cover scenario

* lint fix

* remove claude ignore

* remove duplicate and fix tests

* increase coverage

* lint

* Including integration tests for config changes and params divergence

* boundary limits

* race condition fix

* Test validator's ability to rewind upon span rotation (ethereum#1960)

* Test validator's ability to rewind upon span rotation

* Add unit tests

* Remove dup code

* Parallelize tests

* eth/protocols/eth: remove todo in p2p handlers

* core: made parallel state processor and state processor consistent, to accept ChainContext

* eth/tracers: include state sync tx in traces post-Madhugiri (ethereum#2010)

* chore: fix lint

* eth: fix concurrent map writes panic in witness protocol (ethereum#2023)

Protect failedRequests map access with mapsMu lock in receiveWitnessPage and buildWitnessRequests to prevent "concurrent map writes" panic when multiple goroutines update retry counts simultaneously.

* eth/fetcher: skip blob related test

* core: (blockstm) added a check to discard negative tx dependencies

* fix(api): tracers tests for state-sync tx (ethereum#2026)

* Updating enodes for mainnet and amoy (ethereum#2021)

* Updating enodes for mainnet and amoy

* Fixed formatting

* pruner: covering reorg scenarios (ethereum#1916)

* pruning with reorg resistance

* offline reorg logic

* extra test

* cover beyond head test scenario

* consensus/bor: use CodeChangeUnspecified

* Fix race conditions detected in make test-race

Also added a nightly github action that runs race condition check

* Address CR comments

* Enable rebroadcast by default (ethereum#2028)

* revert: P256VerifyGas to 3450 (ethereum#2030)

* revert: P256VerifyGas to 3450

* fix: testdata

* chore: add eip7951 to p256Verify precompile

* delete: crypto/secp256r1/publickey.go

* fix(ci): use state-sync action

* fix(ci): test-state-sync (ethereum#2032)

* fix(ci): test-state-sync

* chore: rename actions

* chore: nits

* Enable rebroadcast by default (ethereum#2028) (ethereum#2037)

* Install polycli in kurtosis e2e (ethereum#2036)

This is required by opcode test in kurtosis_smoke_test.sh

* lisovo: CLZ opcode and P256 gas cost changes (ethereum#2040)

* tbdhf: CLZ opcode and P256 gas cost changes

* chore: nits

* revert: state-sync test change

* chore: nit

* chore: final nit

* fix: test

* chore: rename to lisovo

* feat: flexible base fee on lisovo HF (ethereum#2041)

* covering super low fee scenario

* moving configurable rules to lisovo

* fix missing tests

* chore: add amoy hf block number

---------

Co-authored-by: Lucca Martins <lucca_martins30@yahoo.com.br>

* chore: bump version

* consensus/misc/eip4844: small update to fix simulatev1 crash (ethereum#2054)

* core, internal, params: lisovoPro HF and version bump (ethereum#2055)

* core, internal, params: lisovoPro HF and version bump

* core: add lisovoPro instructionset

* core: lisovo-lisovoPro instructionset test

* consensus/bor: fix goroutine leak in runMilestoneFetcher when Heimdall is unreachable (ethereum#2056)

FetchMilestone was called with context.Background(), which has no deadline. When Heimdall becomes unreachable, FetchWithRetry enters an infinite retry loop that never returns. Since the ticker fires every second, a new blocked goroutine accumulates each tick — leading to OOM within minutes.

Add a 30s context timeout to bound each call, matching the existing pattern in retryHeimdallHandler (eth/backend.go). This caps in-flight goroutines at ~30 instead of growing unboundedly.

* fix(shutdown): cancel in-flight Heimdall queries on engine shutdown (ethereum#2058)

* fix(shutdown): cancel in-flight Heimdall queries on engine shutdown

* chore: nit

* consensus/bor: fix sub-second late block detection producing empty blocks (ethereum#2060)

The late-block adjustment in Prepare() uses an integer-second comparison
(header.Time < now.Unix()) to detect when a block is behind schedule and
needs additional build time. Because header.Time is an integer (seconds)
while the actual target time can have sub-second precision, a block can
be up to 999ms late without triggering the adjustment.

Example: with period=1s and parent.Time=T:

  header.Time        = T + 1                     (integer seconds)
  now                = T + 1.820                  (parent block is 820ms late)
  now.Unix()         = T + 1                      (truncated to seconds)
  header.Time < now.Unix() → false                (adjustment skipped!)

This affects both the default path (blockTime=0, where GetActualTime()
falls back to time.Unix(header.Time, 0)) and the custom blockTime path
(where ActualTime has sub-second precision from the parent cache chain).

With no adjustment, GetActualTime() returns a time already in the past.
The interrupt timer in commitWork() expires immediately, which sets the
interruptBlockBuilding flag before fillTransactions() runs. The txpool's
Pending() checks this flag on every address iteration and returns an
empty map, producing a block with 0 transactions even when the pool has
pending transactions.

Fix by replacing the integer comparison with a direct time comparison
against the block's actual target time:

  if now.After(header.GetActualTime()) {

GetActualTime() returns header.ActualTime when set (custom blockTime
with Rio, sub-second precision), or time.Unix(header.Time, 0) as
fallback (default path). This correctly detects lateness in both cases
without over-triggering for on-time blocks, since on-time blocks have
their target time in the future.

* fix(core): cap verifyPendingHeaders to prevent OOM from unbounded header reads (ethereum#2057)

* exp: disable verifyPendingHeaders

* fix: cap verify pending headers at default span length + 1

* fix: add reorg metrics in verify pending headers

* chore: add tests

* refactor: use milestone fetcher and milestone's end block as the start block

* fix: tests

* cmd: bump go

* builder, internal, params: pip-82 and lisovo HF in mainnet (ethereum#2064)

* builder, internal, params: implement new burnContract in lisovo / define lisovo height for mainnet / bump version

* fix lint

---------

Signed-off-by: jsvisa <delweng@gmail.com>
Signed-off-by: Csaba Kiraly <csaba.kiraly@gmail.com>
Signed-off-by: findfluctuate <findfluctuate@outlook.com>
Signed-off-by: liuyueyangxmu <liuyueyangxmu@outlook.com>
Co-authored-by: Lewis <lewis.kim@kaia.io>
Co-authored-by: Delweng <delweng@gmail.com>
Co-authored-by: Gary Rong <garyrong0905@gmail.com>
Co-authored-by: cui <cuiweixie@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Csaba Kiraly <csaba.kiraly@gmail.com>
Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: Guillaume Ballet <3272758+gballet@users.noreply.github.com>
Co-authored-by: Csaba Kiraly <cskiraly@users.noreply.github.com>
Co-authored-by: mishraa-G <divyansh.mishra.mec23@itbhu.ac.in>
Co-authored-by: Galoretka <galoretochka@gmail.com>
Co-authored-by: hero5512 <lvshuaino@gmail.com>
Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
Co-authored-by: aodhgan <36907214+aodhgan@users.noreply.github.com>
Co-authored-by: aodhgan <gawnieg@gmail.com>
Co-authored-by: Youssef Azzaoui <y@azzaoui.fr>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: CertiK <138698582+CertiK-Geth@users.noreply.github.com>
Co-authored-by: Bosul Mun <bsbs8645@snu.ac.kr>
Co-authored-by: maskpp <maskpp266@gmail.com>
Co-authored-by: jwasinger <j-wasinger@hotmail.com>
Co-authored-by: Kyrin <kyrincode@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: lightclient <lightclient@protonmail.com>
Co-authored-by: Rizky Ikwan <rizzikwann@gmail.com>
Co-authored-by: anim001k <140460766+anim001k@users.noreply.github.com>
Co-authored-by: Austin Larson <78000745+alarso16@users.noreply.github.com>
Co-authored-by: Coder <161350311+MamunC0der@users.noreply.github.com>
Co-authored-by: wit liu <wit765765346@gmail.com>
Co-authored-by: maradini77 <140460067+maradini77@users.noreply.github.com>
Co-authored-by: Pratik Patil <pratikspatil024@gmail.com>
Co-authored-by: findfluctuate <findfluctuate@outlook.com>
Co-authored-by: liuyueyangxmu <liuyueyangxmu@outlook.com>
Co-authored-by: Jerry <jerrycgh@gmail.com>
Co-authored-by: Lucca Martins <lucca_martins30@yahoo.com.br>
Co-authored-by: Angel Valkov <avalkov@polygon.technology>
Co-authored-by: Krishang <109511742+kamuikatsurgi@users.noreply.github.com>
Co-authored-by: kamuikatsurgi <shahkrishang11@gmail.com>
Co-authored-by: Raneet Debnath <35629432+Raneet10@users.noreply.github.com>
Co-authored-by: Manav Darji <manavdarji.india@gmail.com>
Co-authored-by: Raneet Debnath <raneetdebnath10@gmail.com>
Co-authored-by: ChanHongMing <91173675+ChanHongMing@users.noreply.github.com>
Co-authored-by: Adam Dossa <adossa@polygon.technology>
Co-authored-by: Adam Dossa <adam.dossa@gmail.com>
Co-authored-by: Léo Vincent <28714795+leovct@users.noreply.github.com>
Co-authored-by: Sanket Saagar Karan <ssaagar@polygon.technology>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

TestServerWebsocketReadLimit failure due to race condition

2 participants